import java.util.*;
import java.io.*;
//OR26 最长回文子串
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param A string字符串 
     * @return int整型
     */
    //中心扩散法
    //注意该回文的奇偶性
    public int getLongestPalindrome (String A) {
        if(A.length()==1){
            return 1;
        }
        int maxLen=0;
        for(int i=0;i<A.length();i++){
            int len=0;
            int left=i;
            int right=i+1;
            //偶数
            while(left>=0&&right<A.length()&&A.charAt(left)==A.charAt(right)){
                len+=2;
                left--;
                right++;
            }
            maxLen=Math.max(maxLen,len);
            //奇数
            len=1;
            left=i-1;
            right=i+1;
            while(left>=0&&right<A.length()&&A.charAt(left)==A.charAt(right)){
                len+=2;
                left--;
                right++;
            }
            maxLen=Math.max(maxLen,len);
        }
        return maxLen;
    }
}




//DP30 买卖股票的最好时机(一)
 class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        String[] s = reader.readLine().split(" ");
        int[] arr = new int[n];
        for(int i=0;i<n;i++){
            arr[i]=Integer.parseInt(s[i]);
        }
        int min=Integer.MAX_VALUE;
        int ans=0;
        for(int i=0;i<n;i++){
            if(arr[i]<min){
                min=arr[i];
                continue;
            }
            if(arr[i]>min){
                ans=Math.max(ans,arr[i]-min);
            }
        }
        System.out.print(ans);
    }
}








// DP13 [NOIP2002 普及组] 过河卒
 class Main1 {
    public static void main(String[] args) throws IOException{
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        String[] s = reader.readLine().split(" ");
        int x=Integer.parseInt(s[0]);
        int y=Integer.parseInt(s[1]);
        int x1=Integer.parseInt(s[2]);
        int y1=Integer.parseInt(s[3]);
        //设置数组为long类型，不然可能溢出
        long[][] arr=new long[x+2][y+2];

        for(int i=1;i<=x+1;i++){
            for(int j=1;j<=y+1;j++){
                //如果是第一个数则赋值为1，跳过
                if(i==1&&j==1){
                    arr[i][j]=1;
                    continue;
                }
                //如果是马的控制点则为0，跳过
                if(judge(i-1,j-1,x1,y1)){
                    arr[i][j]=0;
                    continue;
                }
                //既不是第一个数，也不是马的跳跃点
                //题目给出了只能向下或者向右走，那么该点就为上面和左边的点的路径和
                arr[i][j]=arr[i-1][j]+arr[i][j-1];
            }
        }
        System.out.print(arr[x+1][y+1]);
    }
    //题目给的条件: 该马所在的点  和  所有跳跃一步可达的点称为对方马的控制点。
    // |x1-x|+|y1-y|=3,且x1!=x,y1!=y
    public static boolean judge(int x,int y,int x1,int y1){
        return Math.abs(x1-x)+Math.abs(y1-y)==3&&x!=x1&&y!=y1||(x==x1&&y==y1);
    }
}